La función `filter_var` en PHP es una herramienta poderosa y versátil que permite validar y sanitizar datos. Esto es particularmente útil cuando se trabaja con datos de entrada, como los provenientes de formularios web, para asegurarse de que son seguros y correctos antes de procesarlos o almacenarlos en una base de datos. `filter_var` toma dos argumentos principales: el valor que se va a validar o sanitizar y un filtro que determina el tipo de validación o sanitización que se realizará.
La validación asegura que los datos cumplen con ciertos criterios predefinidos. Por ejemplo, puedes usar `filter_var` para validar si una dirección de correo electrónico es válida:
```php
$email = “test@example.com”;
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo “La dirección de correo electrónico es válida.”;
} else {
echo “La dirección de correo electrónico no es válida.”;
}
```
En este ejemplo, se usa `FILTER_VALIDATE_EMAIL` que aplica un conjunto de reglas para determinar si la cadena proporcionada es una dirección de correo electrónico válida.
Otros filtros de validación incluyen:
- `FILTER_VALIDATE_BOOLEAN`: Valida un valor como un booleano.
- `FILTER_VALIDATE_FLOAT`: Valida un valor como un número de punto flotante.
- `FILTER_VALIDATE_INT`: Valida un valor como un número entero.
- `FILTER_VALIDATE_URL`: Valida un valor como una URL.
La sanitización, por otro lado, limpia los datos para eliminar cualquier contenido potencialmente dañino o no deseado. Por ejemplo, puedes usar `filter_var` para eliminar todos los caracteres excepto las letras y números de una cadena:
```php
$str = “
En este caso, `FILTER_SANITIZE_STRING` elimina las etiquetas HTML del string, haciendo que quede solo el texto plano.
Otros filtros de sanitización incluyen:
- `FILTER_SANITIZE_EMAIL`: Elimina todos los caracteres excepto letras, dígitos y los caracteres !#$%&’*+-/=?^_`{|}~@.[].
- `FILTER_SANITIZE_NUMBER_FLOAT`: Elimina todos los caracteres excepto dígitos, signo de más, signo de menos, e, E y el separador decimal.
- `FILTER_SANITIZE_NUMBER_INT`: Elimina todos los caracteres excepto dígitos, signo de más y signo de menos.
- `FILTER_SANITIZE_URL`: Elimina todos los caracteres excepto letras, dígitos y $-_.+!*’(),{}|\\^~[]`<>#%”;/?:@&=.
A continuación se muestra un ejemplo más completo en el que se valida y se sanitizan varios tipos de datos:
```php
$input_email = “ usuario@ejemplo.com “;
$input_age = “25años”;
$input_url = “http://www.ejemplo.com/”;
// Sanitizar los datos
$sanitized_email = filter_var($input_email, FILTER_SANITIZE_EMAIL);
$sanitized_age = filter_var($input_age, FILTER_SANITIZE_NUMBER_INT);
$sanitized_url = filter_var($input_url, FILTER_SANITIZE_URL);
// Validar los datos
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
echo “Correo electrónico validado: $sanitized_email\n”;
} else {
echo “Correo electrónico no válido.\n”;
}
if (filter_var($sanitized_age, FILTER_VALIDATE_INT)) {
echo “Edad validada: $sanitized_age\n”;
} else {
echo “Edad no válida.\n”;
}
if (filter_var($sanitized_url, FILTER_VALIDATE_URL)) {
echo “URL validada: $sanitized_url\n”;
} else {
echo “URL no válida.\n”;
}
```
- [PHP Manual – filter_var](https://www.php.net/manual/es/function.filter-var.php)
- [W3Schools – PHP Filters](https://www.w3schools.com/php/php_filter.asp)
- [Mozilla Developer Network (MDN) – Data Validation in PHP](https://developer.mozilla.org/en-US/docs/Learn/Server-side/PHP/Validation)
La función `filter_var` es esencial para garantizar la seguridad y la integridad de los datos en aplicaciones PHP. Al validar y sanitizar correctamente los datos de entrada, puedes prevenir una multitud de vulnerabilidades de seguridad comunes.